// SISTEMA.: INFOSEG/IDENTIFICACAO CRIMINAL
// PROGRAMA: INFSEG02
// ANALISTA: SOLON MIRANDA
// DATA: 09/03/2005
// OBJETIVO:- ATUALIZACAO DO ARQUIVO DO INDICE NACIONAL LAY-OUT
// DOS REGISTROS VERSAO 2 - on line
// ATUALIZADO
// JCL - INFOSEG (SYS2.PARM.INFOSEGJ)
// ULTIMA ATUALIZACAO * EM 15/02/2005
// OBSERVACAO:- UTILIZAR O JCL INFSEG02, PARA RODAR EM BATCH

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileWriter;
import java.io.IOException;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.model.Infol;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Infseg02 OBJETIVO:- ATUALIZACAO DO ARQUIVO DO INDICE NACIONAL LAY-OUT DOS REGISTROS VERSAO 2 - on line ATUALIZADO JCL - INFOSEG (SYS2.PARM.INFOSEGJ) ULTIMA ATUALIZACAO * EM 15/02/2005
 * OBSERVACAO:- UTILIZAR O JCL INFSEG02, PARA RODAR EM BATCH *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/infseg02")
public class Infseg02 {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	// Includes utilizados
	Infol infol = new Infol();
	// Areas globais / session // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	FileWriter arquivo1;
	
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;

	private String nomew;
	private int cnome = 0;
	private int cmae = 0;
	private int cpai = 0;
	private int idata;
	private String[] jObservacoes;
	private int wnacion;
	private String regInfoseg = "";
	private String header = "";

	public Infseg02(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar() {
		try {
			main();
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main() throws Exception {

		String traller = "";
		arquivo1 = new FileWriter(UtilBean.pathFiles()+"arquivo1");
		idata = UtilBean.obtemDataCorrente();

		// GRAVA TRALLER
		traller = UtilBean.moveSubstring(traller, 0, 1, "A", infol.tipRegt);
		traller = UtilBean.moveSubstring(traller, 1, 1, "A", infol.pv1);
		traller = UtilBean.moveSubstring(traller, 2, 11, "A", infol.nomeReg);
		traller = UtilBean.moveSubstring(traller, 13, 1, "A", infol.pv2);
		traller = UtilBean.moveSubstring(traller, 14, 129, "A", infol.restoX1);
		traller = UtilBean.moveSubstring(traller, 143, 200, "A", infol.restoX2);
		traller = UtilBean.moveSubstring(traller, 343, 1, "A", infol.finalReg1);
		arquivo1.write(traller);
		////dao.rollback();
		while (criminalView.leituradescTipoRegFaixa("IN", "AL")) {
			// READADA
			if (!(criminalView.getDataDocAtu() == idata)) {
				continue;
			}
			infol.nome = criminalView.getNomeCompleto();
			funcoes.validnom(infol.nome);
			if (funcoes.err == 0) {
				switch (criminalView.getTipoReg()) {
				case "IN": {
					infol.action = String.valueOf(1);
					gravaRegInfoseg();
					break;
				}
				case "EX": {
					infol.actionDel = String.valueOf(3);
					deletaRegInfoseg();
					break;
				}
				case "AL": {
					infol.action = String.valueOf(1);
					infol.finalReg2 = ";";
					gravaRegInfoseg();
					break;
				}
				default: {
					continue;
				}
				}
			}

		}
		criminalView.fecha();

		// Par�grafo: l1()
		while (criminalView.leituradescTipoRegFaixa("IN", "AL")) {
			if (!(criminalView.getDataDocAtu() == idata)) {
				continue;
			}
			cnome = 0;
			cmae = 0;
			cpai = 0;
			infol.nome = criminalView.getNomeCompleto();
			funcoes.validnom(infol.nome);
			if (funcoes.err != 0) {
				cnome = 1;
				UtilBean.mensagemTexto("# ERRO NOME:", criminalView.getTipoReg(), criminalView.getRegEstadualGeral(), UtilBean.subStr(nomew, 0, 30));
			}

			infol.nome = criminalView.getNomePai();
			funcoes.validnom(infol.nome);
			if (funcoes.err != 0) {
				cpai = 1;
				UtilBean.mensagemTexto("# ERRO NOME PAI:", criminalView.getTipoReg(), criminalView.getRegEstadualGeral(), UtilBean.subStr(nomew, 0, 30));
			}

			infol.nome = criminalView.getNomeMae();
			funcoes.validnom(infol.nome);
			if (funcoes.err != 0) {
				cmae = 1;
				UtilBean.mensagemTexto("# ERRO NOME MAE:", criminalView.getTipoReg(), criminalView.getRegEstadualGeral(), UtilBean.subStr(nomew, 0, 30));
			}

			if (cnome == 0) {
				infol.quantRegh += 1;
			}

		}
		criminalView.fecha();

		// GRAVA HEADER
		infol.tipReg = String.valueOf(9);

		header = UtilBean.moveSubstring(header, 0, 1, "A", infol.tipReg);
		header = UtilBean.moveSubstring(header, 1, 1, "A", infol.pv27);
		header = UtilBean.moveSubstring(header, 2, 5, "N", infol.quantRegh);
		header = UtilBean.moveSubstring(header, 7, 137, "A", infol.restoY1);
		header = UtilBean.moveSubstring(header, 144, 200, "A", infol.restoY2);
		arquivo1.write(header);
		////dao.rollback();
		UtilBean.mensagemTexto("*** OK. FIM DA GERACAO DO ARQUIVO CRIMINAL ***");
		arquivo1.close();
	}

	private void gravaRegInfoseg() throws Exception {
		infol.pkUf = String.valueOf(criminalView.getRegEstadualGeral());
		infol.nome = criminalView.getNomeCompleto();
		nomew = criminalView.getNomePai();
		funcoes.validnom(nomew);
		if (funcoes.err != 0) {
			infol.pai = " ";
		} else {
			infol.pai = criminalView.getNomePai();
		}

		nomew = criminalView.getNomeMae();
		funcoes.validnom(nomew);
		if (funcoes.err != 0) {
			infol.mae = " ";
		} else {
			infol.mae = criminalView.getNomeMae();
		}

		if (criminalView.getDataNasc() == 0) {
			infol.dataNascimento = "        ";
		} else {
			infol.dataNascimento = String.valueOf(criminalView.getDataNasc());
		}

		if (criminalView.getSexo() != 0) {
			if (criminalView.getSexo() == 1) {
				infol.sexoMf = "M";
			} else {
				infol.sexoMf = "F";
			}

		} else {
			infol.sexoMf = " ";
		}

		if (criminalView.getCodigoCutis() == 0) {
			infol.cor = " ";
		} else {
			infol.cor = String.valueOf(criminalView.getCodigoCutis());
		}

		infol.naturalidadeCidade = criminalView.getNaturalidade();
		infol.naturalidadeEstado = criminalView.getUfNaturalidade();
		wnacion = criminalView.getNacionalidade();
		infol.nacionalidadePais = String.valueOf(UtilBean.subStr(String.valueOf(wnacion), 0, 1));
		infol.nacionalidadeI = String.valueOf(1);
		infol.tipoProprietarioArmaI = " ";
		if (criminalView.getRegEstadualGeral() == 0) {
			infol.rg = " ";
		} else {
			infol.rg = String.valueOf(criminalView.getRegEstadualGeral());
		}

		infol.ufRg = "MA";
		if (criminalView.getDataDocAtu() == 0) {
			infol.dataUltMovUf = String.valueOf(UtilBean.obtemDataCorrente());
		} else {
			infol.dataUltMovUf = String.valueOf(criminalView.getDataDocAtu());
		}

		infol.possuiInqueritoI = criminalView.getInqueritoPolicial();
		infol.possuiArmaI = criminalView.getPossuiArma();
		infol.possuiProcessoI = criminalView.getPossuiProcesso();
		if (criminalView.getObservacao(1).trim().equals("")) {
			infol.possuiProcessoI = "N";
		} else {
			infol.possuiProcessoI = "S";
		}

		if (criminalView.getFalecido().trim().equals("")) {
			infol.falecidoI = "N";
		} else {
			infol.falecidoI = criminalView.getFalecido();
		}

		if (criminalView.getPossuiMandatoAberto().equals("S")) {
			infol.possuiMandatoPAbertoI = criminalView.getPossuiMandatoAberto();
		} else {
			infol.possuiMandatoPAbertoI = "N";
		}

		infol.foragido = " ";
		infol.cumprindoPena = " ";
		jObservacoes[4] = criminalView.getObservacao(4);
		if (UtilBean.subStr(jObservacoes[4], 9, 12).equals("NARCOTRAFICO")) {
			infol.possuiNarcotrafico = "S";
		} else {
			infol.possuiNarcotrafico = "N";
		}

		infol.ufOrigem = " ";

		regInfoseg = UtilBean.moveSubstring(regInfoseg, 0, 1, "A", infol.action);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 1, 1, "A", infol.pv3);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 2, 20, "A", infol.pkUf);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 22, 1, "A", infol.pv4);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 23, 70, "A", infol.nome);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 93, 1, "A", infol.pv5);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 94, 70, "A", infol.pai);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 164, 1, "A", infol.pv6);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 165, 70, "A", infol.mae);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 235, 1, "A", infol.pv7);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 236, 8, "A", infol.dataNascimento);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 244, 1, "A", infol.pv8);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 245, 1, "A", infol.sexoMf);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 246, 1, "A", infol.pv9);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 247, 1, "A", infol.cor);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 248, 1, "A", infol.pv10);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 249, 35, "A", infol.naturalidadeCidade);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 284, 1, "A", infol.pv11);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 285, 2, "A", infol.naturalidadeEstado);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 287, 1, "A", infol.pv12);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 288, 1, "A", infol.nacionalidadeI);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 289, 1, "A", infol.pv13);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 290, 4, "A", infol.nacionalidadePais);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 294, 1, "A", infol.pv14);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 295, 1, "A", infol.tipoProprietarioArmaI);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 296, 1, "A", infol.pv15);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 297, 15, "A", infol.rg);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 312, 1, "A", infol.pv16);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 313, 2, "A", infol.ufRg);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 315, 1, "A", infol.pv17);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 316, 8, "A", infol.dataUltMovUf);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 324, 1, "A", infol.pv18);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 325, 1, "A", infol.possuiInqueritoI);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 326, 1, "A", infol.pv19);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 327, 1, "A", infol.possuiArmaI);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 328, 1, "A", infol.pv20);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 329, 1, "A", infol.possuiProcessoI);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 330, 1, "A", infol.pv21);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 331, 1, "A", infol.possuiNarcotrafico);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 332, 1, "A", infol.pv22);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 333, 1, "A", infol.falecidoI);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 334, 1, "A", infol.pv23);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 335, 1, "A", infol.possuiMandatoPAbertoI);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 336, 1, "A", infol.pv24);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 337, 1, "A", infol.foragido);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 338, 1, "A", infol.pv25);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 339, 1, "A", infol.cumprindoPena);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 340, 1, "A", infol.pv26);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 341, 2, "A", infol.ufOrigem);
		regInfoseg = UtilBean.moveSubstring(regInfoseg, 343, 1, "A", infol.finalReg2);
		arquivo1.write(regInfoseg); // / writeworkfile__
		////dao.rollback();
	}

	private void deletaRegInfoseg() throws IOException {
		String deletaReg = "";
		infol.pkUfDel = String.valueOf(criminalView.getRegEstadualGeral());
		deletaReg = UtilBean.moveSubstring(deletaReg, 0, 1, "A", infol.actionDel);
		deletaReg = UtilBean.moveSubstring(deletaReg, 1, 1, "A", infol.pv3D);
		deletaReg = UtilBean.moveSubstring(deletaReg, 2, 20, "A", infol.pkUfDel);
		deletaReg = UtilBean.moveSubstring(deletaReg, 22, 121, "A", infol.restoD1);
		deletaReg = UtilBean.moveSubstring(deletaReg, 143, 200, "A", infol.restoD2);
		deletaReg = UtilBean.moveSubstring(deletaReg, 343, 1, "A", infol.finalReg3);
		arquivo1.write(deletaReg); // / writeworkfile__
		////dao.rollback();
	}
}
